/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/27 18:49
 */

//有一款著名的大型多人电子竞技游戏网站“喜爱福”，网站通常会举办一些比赛。
//通常一名参赛选手只有一个账号，但不难猜到，总会有人“开小号”上分。
//小苯就是一位该游戏的忠实玩家，他总共有n个账号，每个账号的分数分别为ai。
//他深谙游戏中一位著名玩家st****lk的一句名言：“只要你永远打分更低的号，那么你的maxRating单调不降”。
//（maxRating指一名玩家分最高的账号的分数）
//现在我们记录了小苯m次的比赛记录，已知小苯每次都会谨记st****lk的名言，从而使用分数最低的账号参赛，
//现在我们想知道小苯每次参赛后，他的maxRating是多少，请你编写代码来算算吧。
//
//输入描述
//  输入包含三行。
//  第一行两个正整数n,m(1<=n,m<=10^5)，分别表示小苯的账号个数，和小苯新参加的比赛记录数。
//  第二行n个整数a_i(0<=ai<=10^9)，表示小苯每个账号目前的分数。
//  第三行m个整数(0<=bj<=10^9)，分别表示小苯每次比赛后，分数的变化值。
//  （例如如果小苯使用分数为x的账号参赛，那么他在参加完第j场比赛后，该账号分数会变为x+bj。）
//输出描述
//  输出包含m行，每行一个整数，表示小苯参与完第j场比赛后，他的maxRating的值。
//
//示例 1
//输入
//5 6
//1145 1500 1600 1538 1222
//10 400 500 1000 2000 10000
//输出
//1600
//1600
//1722
//2500
//3538
//11555
//说明
//  共比赛了 6 场，每场赛后都输出小苯当前分数最高的分数，如样例所示，前两场比赛后小苯分数为 1145 的账号涨到了 1555，因此第三场比赛使用当前分数最低的 1222 参赛，涨了 500分变为 1722，成为小苯分数最高的账号，因此第三场赛后输出1722。

#include <cstdio>
#include <functional>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main() {
    int m, n;
    scanf("%d%d", &m, &n);
    priority_queue<long long, vector<long long>, greater<>> pq;
    long long res = 0;
    for (int i = 0; i < m; i++) {
        long long tmp;
        scanf("%lld", &tmp);
        res = max(res, tmp);
        pq.push(tmp);
    }

    for (int i = 0; i < n; i++) {
        long long b;
        scanf("%lld", &b);
        long long tmp = pq.top() + b;
        pq.pop();
        res = max(res, tmp);
        pq.push(tmp);
        printf("%lld\n", res);
    }
    return 0;
}
